﻿using System.Collections.Generic;

namespace DimensionsHelper.Common.Contracts.Metadata;

/// <summary>
///     MDM文档中的元素分类定义对照表。
/// </summary>
public interface ICategoryMap : IEnumerable<ICategoryId>
{
    /// <summary>
    ///     使用分类名称获取分类元素ID。
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    int? GetIdByName(string name);

    /// <summary>
    ///     使用分类值获取分类元素ID。
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    string? GetNameById(int value);

    /// <summary>
    ///     给指定分类名分配数值。
    /// </summary>
    /// <param name="name">给定分类名</param>
    /// <returns>分配的分类数值</returns>
    int Allocate(string name);

    /// <summary>
    ///     清空对照表内容。
    /// </summary>
    void Clear();
}

/// <summary>
///     MDM文档中的分类元素ID和名称的对照表元素。
/// </summary>
public interface ICategoryId
{
    /// <summary>
    ///     当前分类元素的名称，不允许重复，中间允许使用'.'来分割命名空间。
    /// </summary>
    string Name { get; }

    /// <summary>
    ///     当前分类元素的值，不允许重复，需要是整数。
    /// </summary>
    int Value { get; }
}